package top.infopub.mgr.bpa.dao;


import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import top.infopub.generic.GenericDao;
import top.infopub.mgr.bpa.domain.BpaProjectDomain;
import top.infopub.mgr.bpa.domain.ContractExtDomain;
import top.infopub.mgr.bpa.vo.ContractExtVo;
import top.infopub.model.bpa.ContractExt;

import java.util.List;


/** 对外承继协议(BPA_CONTRACT_EXT) **/
public interface ContractExtDao extends GenericDao<ContractExt, String> {

    /**
     * 根据条件查询承继协议记录
     * @param contractExtVo
     * @return
     * @see
     */
    Page<ContractExtDomain> selectByDomainWhere(ContractExtVo contractExtVo);

    /**
     * 根据条件查询承继协议记录--我审批的列表
     * @param ContractExtVo
     * @return
     * @see
     */
    Page<ContractExtDomain> selectMyCheckByDomainWhere(ContractExtVo contractExtVo);

    /**
     * 添加-承继协议
     */
    void insertById(ContractExt contractExt);

    /**
     * 根据承继协议名称判断是否存在
     */
    List<ContractExt> isExistContractExtName(@Param("contractExtName") String contractExtName,
                                       @Param("proCode") String proCode);

    /**
     * 根据补充协议名称判断是否存在
     */
    List<ContractExt> isExistContractExtSaName(@Param("contractExtSaName") String contractExtSaName,
                                         @Param("proCode") String proCode);

    /**
     * 查询所有承继协议的项目名称
     */
    List<ContractExt> queryAllExts(@Param("visibleProCodes") String visibleProCodes);

    /**
     * 根据项目编号查询相关带入信息
     */
    ContractExtDomain selectByExtProCode(@Param("proCode") String proCode, @Param("id") String ids);

    /**
     * 根据项目编号查询版本号信息
     */
    List<ContractExt> selectVersionNoByProCode(@Param("proCode") String proCode);

    /**
     * 查询继承协议信息 并且项目没有发起过内部协议
     */
    List<ContractExt> selectAllUsableContractExt(@Param("id") String ids,
                                                 @Param("proCode") String proCode,
                                                 @Param("visibleProCodes") String visibleProCodes);

    /**
     * 查询继承协议信息
     */
    List<ContractExt> selectAllContractExt(@Param("id") String ids,
                                           @Param("proCode") String proCode);

    /**
     * 根据项目编号，查询承继协议信息
     */
    ContractExtDomain selectByContractExtProCode(@Param("proCode") String proCode);

    /**
     * 根据项目编号，查询承继协议信息
     */
    ContractExtDomain selectAllByProCode(@Param("proCode") String proCode);

    /**
     * 根据项目编号查询最新的承继协议
     * @param proCode 项目编号
     * @return
     * @see
     */
    ContractExt selectLatestContractExtByProCode(String proCode);

    /**
     * 根据合同签订日期 判断是否为  补充签订
     */
    ContractExt selectContractExtSignDate();

    /**
     * 根据项目编号查询最新的承继协议
     */
    ContractExt selectByProCode(@Param("proCode") String proCode);

    /**
     * 根据id查询承继协议详情
     */
    ContractExtVo queryById(String id);

    /**
     * 根据id查询Domain信息
     */
    ContractExtDomain selectById(String id);

    /**
     * 判断项目名称是否存在
     */
    ContractExt isExistProName(String proCode);

    List<BpaProjectDomain> selectProject();

    ContractExt selectExt(String id);

    BpaProjectDomain selectByDomain(String proCode);

    void updateExt(ContractExt contractExt);

    void insertExt(ContractExt contractExt);
}
